import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router)

/* Layout */
import Layout from '@/layout'
import departmentRouter from './modules/department'
import approvalRouter from './modules/approval'
import attendanceRouter from './modules/attendance'
import employeeRouter from './modules/employee'
import permissionRouter from './modules/permission'
import roleRouter from './modules/role'
import salaryRouter from './modules/salary'
import socialRouter from './modules/social'


/**
 * 基础路由
 * 所有角色均可访问
 */
export const constantRoutes = [
  {
    path: '/login',
    component: () => import('@/views/login/index'),
    hidden: true
  }, {
    path: '/404',
    component: () => import('@/views/404'),
    hidden: true
  }, {
    path: '/',
    component: Layout,
    redirect: '/dashboard',
    children: [{
      path: 'dashboard',
      name: 'Dashboard',
      component: () => import('@/views/dashboard/index'),
      meta: { title: '首页', icon: 'dashboard' }
    }]
  }
  // 404从动态路由权限分配中插入 确保在路由数组最后
  // { path: '*', redirect: '/404', hidden: true }
]

// MARK 动态路由 用于权限动态引入
export const asyncRoutes = [
  departmentRouter,
  roleRouter,
  employeeRouter,
  permissionRouter,
  attendanceRouter,
  approvalRouter,
  salaryRouter,
  socialRouter]

// MARK 后端支持
// const express = require('express');
// const path = require('path');
// const app = express();

// app.use(express.static(path.join(__dirname, 'dist')));

// app.get('*', (req, res) => {
//   res.sendFile(path.join(__dirname, 'dist', 'index.html'));
// });

// app.listen(process.env.PORT || 8080);


/**
 * 将路由模式从hash改为history的原因：
 * 1.URL美观性：history模式下的URL更简洁，没有#符号，对于用户体验和SEO（搜索引擎优化）都有好处。
 * 2.用户体验：页面跳转时不会出现刷新的情况，用户体验更好。
 * 3.服务器配置：如果服务器配置支持history模式，那么使用history模式可以避免一些不必要的问题，比如直接访问某个路由时返回404错误。
 */

const createRouter = () => new Router({
  mode: 'history', // MARK history模式没有#，地址变化会引起页面刷新
  scrollBehavior: () => ({ y: 0 }),
  routes: constantRoutes
})

const router = createRouter()

export function resetRouter () {
  const newRouter = createRouter()
  router.matcher = newRouter.matcher // reset router
}
/**
 * // MARK 左侧菜单的数据来源于路由模块的信息，
 * 根据路由信息的hidden属性来判断是否显示该路由信息到菜单
 * 菜单属性中的图表和标题来源于路由meta中的icon和title属性
 */
export default router
